﻿#define _CRT_SECURE_NO_WARNINGS 2
#include<iostream>
using namespace std;

//
//class A {
//public:
// virtual void Fun1();
//
// static void Print() {
//	 cout << "static void Print()" << endl;
// }
//};
//
//void A::Fun1() {
//	cout << "A::Fun1()" << endl;
//}
//
//class B :public A {
//public:
//	 
//	void Fun1() {
//		cout << "B::Fun1()" << endl;
//	}
//};
//
//void test(int a) {
//	cout << "test(int a) " << a << endl;
//}
//
//int main() {
//	A::Print();
//	B b;
//	A& a = b;
//	a.Fun1();
//	/*A a;
//	a.Fun1();
//	B b;
//	b.Fun1();
//	test(1.1);*/
//	return 0;
//}


////////////////////////////////////////////////////////////////////////////////////
//没有virtual 没有实现多态
//class A { public: void test(float a) { cout <<"A::void test()" << a; } };
//class B :public A { public: void test(int b) { cout <<"B::void test()" << b; } };
//void main() { 
//	A* a = new A; 
//	B* b = new B; 
//	a = b; 
//	a->test(1.1);
//}
//
//class A {
//public:
//	virtual void Fun1() {
//		cout << "void  Fun1()" << endl;
//	 }
//};
//
//class B :public A {
//public:
//
//};
//
//int main() {
//	//new A;
//	A a;
//	B b;
//	return 0;
//}

//
//class A
//
//{
//
//public:
//
//    virtual void f()
//
//    {
//
//        cout << "A::f()" << endl;
//
//    }
//
//};
//
//
//
//class B : public A
//
//{
//
//private:
//
//    virtual void f()
//
//    {
//
//        cout << "B::f()" << endl;
//
//    }
//
//};
//
//int main() {
//    // A* pa = (A*)new B;
//    B b;
//    A* pa = &b;
//    pa->f();
//    return 0;
//}
//

//
//class A {
//public:
//
//    A() :m_iVal(0) { test(); }
//
//    virtual void func() { cout << m_iVal << " "; }
//
//    void test() { func(); }
//
//public:
//    int m_iVal;
//};
//
//class B : public A
//
//{
//
//public:
//
//    B() { test(); }
//
//    virtual void func()
//
//    {
//       ++m_iVal;
//       cout << m_iVal << " ";
//
//    }
//
//};
//
//
//
//int main()
//
//{
//
//    A* p = new B;
//
//    p->test();
//
//    return 0;
//
//}


class Car {
public:
	inline virtual void Drive() = 0;
};

class Benz :public Car {
public:
	inline virtual void Drive() {
		cout << "Benz comfortable" << endl;
	}
};

class BMW :public Car {
public:
	inline virtual void Drive() {
		cout << "BMW quick" << endl;
	}
};

class BYD :public Car {
public :
	inline virtual void Drive() {
		cout << "BYD cheap" << endl;
	}
};

void Print(Car* ptr) {
	ptr->Drive();
}

int main() {
	BYD b;
	b.Drive();
	Print(new Benz);
	Print(new BMW);
	Print(new BYD);
}